// 资源控制层：处理请求与发出响应。

// 引入Model层
const { addResources,delResource,updateResource,queryResources } = require('../models/resource')
// TODO：参数校验

class ResourcesCtl{
    // 获取资源列表
    async getResourcesList(ctx){
        // 解构赋值获取查询条件
        let { query_value,limitNumber,skipNumber,field,orderType } = ctx.request.query
        // 查询条件
        let queryObj = {}
        limitNumber = parseInt(limitNumber)
        skipNumber = parseInt(skipNumber)
        const queryInfo = {
            limitNumber : limitNumber,
            skipNumber : skipNumber,
            field : field,
            orderType : orderType
        }
        let getResult = {}
        // 如果没有值，则查询所有数据
        if(query_value === ''){
            queryObj = {
                isDeleted : false
            }
            getResult = await queryResources(queryObj,queryInfo,{
                isDeleted:false
            })
        }else{
            queryObj = {
                product_name : query_value,
                isDeleted : false
            }
            const getByNameResult = await queryResources(queryObj,queryInfo,{
                isDeleted:false
            })
            if(getByNameResult.length === 0){
                queryObj = {
                    resource_url : query_value,
                    isDeleted : false
                }
                const getByUrlResult = await queryResources(queryObj,queryInfo,{
                    isDeleted:false
                })
                getResult = getByUrlResult
            }else{
                getResult = getByNameResult
            }
        }
        ctx.body = {
            data : getResult,
            message : '获取资源列表成功',
            status : 200
        }
    }
    // 新增资源信息
    async createResource(ctx){
        // 校验post参数
        ctx.verifyParams({
            product_name:{ type: 'string' , required: true },
            resource_url:{type: 'string' , required:true }
        })
        // 解构赋值获取产品名和资源的网盘链接
        const { product_name,resource_url } = ctx.request.body
        // 新建一个对象，存储全部信息
        const resourceInfo = {
            product_name : product_name,
            resource_url : resource_url,
            isDeleted:false,
            resource_update_time : new Date()
        }
        // 存储到数据库中
        const addResourceResult = await addResources(resourceInfo)
        ctx.body = {
            data : addResourceResult,
            message : '新增资源成功！',
            status : 200
        }
    }
    // 修改资源信息
    async updateResource(ctx){
        // 获取资源对应Id
        const { id } = ctx.params
        // 校验请求体参数
        ctx.verifyParams({
            product_name:{ type : 'string' , required : true },
            resource_url:{ type : 'string' , required : true }
        })
        // 解构赋值获取产品名和资源的网盘链接
        const { product_name,resource_url } = ctx.request.body
        const updateInfo = {
            product_name:product_name,
            resource_url:resource_url,
            resource_update_time : new Date()
        }
        // 调用修改方法，修改资源
        const updateResourceResult = await updateResource(id,updateInfo)
        ctx.body = {
            updatedNumber : updateResourceResult,
            message : '修改资源信息成功',
            status : 200
        }
    }
    // 删除资源信息
    async deleteResource(ctx){
        // 获取资源对应Id
        const { id } = ctx.params
        // 调用资源删除方法，删除资源
        const deleteResourceResult = await delResource(id)
        ctx.body = {
            data : deleteResourceResult,
            message : '删除资源信息成功',
            status : 200
        }
    }
}

// 导出资源控制器对象（实例化ResourcesCtl类）。
module.exports = new ResourcesCtl();